package cn.stimd.spring.aop.framework;

/**
 * 封装了创建代理的相关信息，确保所有代理的创建都使用相同的配置
 * <p>
 * Created by Stimd
 * 项目地址：https://gitee.com/stimd/spring-wheel
 * 公众号：Java编程探微
 */
public class ProxyConfig {
    //true表示代理整个类（全部方法），false表示代理接口（特定几个方法）
    private boolean proxyTargetClass;
    private boolean optimize;
    //当配置冻结时，不能更改设置
    private boolean frozen;
    //是否阻止使用该配置创建的代理强转为Advised，默认为false，允许所有aop代理转换为Advised接口
    boolean opaque;
    //是否能够代理对象暴露为ThreadLocal，以便AopContext可以进行检索，比如当增加的对象需要调用自身另一个增强方法时有用
    boolean exposeProxy;

    //复制一份代理配置信息
    public void copyFrom(ProxyConfig other) {
        this.proxyTargetClass = other.proxyTargetClass;
        this.optimize = other.optimize;
        this.exposeProxy = other.exposeProxy;
        this.frozen = other.frozen;
        this.opaque = other.opaque;
    }

    public boolean isProxyTargetClass() {
        return proxyTargetClass;
    }

    public void setProxyTargetClass(boolean proxyTargetClass) {
        this.proxyTargetClass = proxyTargetClass;
    }

    public boolean isOptimize() {
        return optimize;
    }

    public void setOptimize(boolean optimize) {
        this.optimize = optimize;
    }

    public boolean isFrozen() {
        return frozen;
    }

    public void setFrozen(boolean frozen) {
        this.frozen = frozen;
    }

    public boolean isOpaque() {
        return opaque;
    }

    public void setOpaque(boolean opaque) {
        this.opaque = opaque;
    }

    public boolean isExposeProxy() {
        return exposeProxy;
    }

    public void setExposeProxy(boolean exposeProxy) {
        this.exposeProxy = exposeProxy;
    }
}
